using System;
using System.Collections.Generic;

namespace OpenRay
{
	//Immutable Class
	public abstract class Material
	{	
		public enum Face {
			Front = 0,
			Back = 1
		}
		
		protected Face FaceHit(Vector Viewer, Vector SurfaceNormal)
		{
			return ( Vector.DotProduct( Viewer, SurfaceNormal ) < 0 ) ? Face.Front : Face.Back;	
		}
		
		public abstract Color Shade(Point worldHit, Point modelHit, Vector normalizedViewer, 
		                            Vector surfaceNormal, IList<Light> lights, uint depth);
		
		public abstract Color Shade(Point worldHit, Point modelHit, Vector normalizedViewer,
		                            Vector surfaceNormal, IList<Light> lights, Material.Face f, uint depth);
	}
}

